import { _decorator, Button, Color, color, Component, instantiate, Label, Node, Prefab, Sprite, SpriteFrame, Toggle } from 'cc';

import { Core } from '../Core/Core';
import { ResourceManager } from '../Core/ResourceManager';
import { EEvent, EPath, ESubView, EView } from '../Config/Enum';
import { EItemQuality, EItemType, IItem, ItemQualityColors } from '../Item/Item';
import { BagItem } from '../Item/BagItem';
import { PrefabPath } from '../Config/ResourceConfig';
import { Equipment, IEquipment } from '../Item/Equipment';
import { Util } from '../Util';
import { MAX_QUIPMENT_LEVEL } from '../Config/Config';


const { ccclass, property } = _decorator;

@ccclass('BagView')
export class BagView extends Component {
        // 添加定时器引用
    private refreshTimer: number = 0;

    ndShaixuan: Node = null!; // 筛选节点


    lbNumOfItems: Label = null!; // 背包物品数量标签
    lbRefreshTime: Label = null!; // 刷新时间标签



    protected onLoad(): void {

        this.ndShaixuan = this.node.getChildByName("Shaixuan");
        this.ndShaixuan.active = false;

        this.lbNumOfItems = this.node.getChildByName("ScrollView").getChildByName("NumOfItems").getComponent(Label);

    }

    protected onEnable(): void {
        Core.Instance.event.on(EEvent.ItemSold, this.refreshBag, this);
        this.onButtonOpenBag(); // 初始化背包
        Core.Instance.currentView = EView.ArsenalView;
        this.updateRefreshTimeDisplay();

    }

    protected onDisable(): void {

        Core.Instance.event.off(EEvent.ItemSold, this.refreshBag, this);
        Core.Instance.currentView = null;
        Core.Instance.currentSubView = null
                
        // 停止定时器
        //this.stopRefreshTimer();
    }

        // 启动刷新时间定时器
    private startRefreshTimer(): void {
        this.stopRefreshTimer(); // 先停止之前的定时器
        
        // 每秒更新一次时间显示
        this.refreshTimer = setInterval(() => {
            this.updateRefreshTimeDisplay();
        }, 1000);
        
        // 立即更新一次显示
        this.updateRefreshTimeDisplay();
    }

    

        // 停止刷新时间定时器
    private stopRefreshTimer(): void {
        if (this.refreshTimer) {
            clearInterval(this.refreshTimer);
            this.refreshTimer = 0;
        }
    }

    // 更新刷新时间显示
    private updateRefreshTimeDisplay(): void {
        if (!this.lbRefreshTime) return;
        
        const remainingTime = Core.Instance.getShopRefreshRemainingTime();
        
        if (remainingTime <= 0) {
            this.lbRefreshTime.string = "";
        } else {
            // 计算分钟和秒数
            const minutes = Math.floor(remainingTime / 60);
            const seconds = remainingTime % 60;
            
            // 格式化为"X分X秒"
            this.lbRefreshTime.string = `还需${minutes}分${seconds}秒刷新`;
        }
    }




    // 创建背包格子
    createBagItem() {
        console.log("创建背包格子节点");
        // 获取内容容器节点
        const contentNode = this.node.getChildByName("ScrollView").getChildByName("view").getChildByName("content");
        
        // 清除现有节点（可选，根据需求决定）
        contentNode.removeAllChildren();
        
        // 获取BagItem预制体
        const prefab = ResourceManager.Instance.getResourceCache().get(PrefabPath.BagItem) as Prefab;
        console.log("BagItem 预制体:", prefab);
        
        // 创建指定数量的背包格子
        for (let i = 0; i < Core.Instance.maxBag; i++) {
            const bagItemNode = instantiate(prefab);
            bagItemNode.name = `BagItem${i + 1}`; // 设置名称：BagItem1, BagItem2...
            contentNode.addChild(bagItemNode);
        }
    }



    

    refreshBag() {
        console.log("刷新背包物品列表:", Core.Instance.bag);
        const contentNode = this.node.getChildByName("ScrollView").getChildByName("view").getChildByName("content");
        this.createBagItem();
        const bagItems = Core.Instance.bag.getItems();
        // 遍历所有背包格子并初始化
        for (let i = 0; i < contentNode.children.length; i++) {
            const bagItemNode = contentNode.children[i];
            const bagItemComp = bagItemNode.getComponent(BagItem);
            if (i < bagItems.length) {
                // 初始化有物品的格子
                bagItemComp.init(bagItems[i]);
                bagItemNode.active = true;
            } else {
                // 保持空格子显示（但无物品）
                //bagItemComp.init(null); // 初始化为空状态
            }
        }
        this.lbNumOfItems.string = `${Core.Instance.bag.getItems().length}/${Core.Instance.maxBag}`;
    }

    refreshMainHeader(){

    }

    // 打开仓库
    onButtonOpenBag() {
        console.log("初始化背包");
        Core.Instance.currentSubView = ESubView.Bag;


        Core.Instance.lastOpenArsenal = "Bag"


        // 显示数量
        this.lbNumOfItems.string = `${Core.Instance.bag.getItems().length}/${Core.Instance.maxBag}`;
        this.createBagItem(); // 创建所有背包格子
        const bagItems = Core.Instance.bag.getItems();

        const contentNode = this.node.getChildByName("ScrollView").getChildByName("view").getChildByName("content");
        
        // 遍历所有背包格子并初始化
        for (let i = 0; i < contentNode.children.length; i++) {
            const bagItemNode = contentNode.children[i];
            const bagItemComp = bagItemNode.getComponent(BagItem);
            
            if (i < bagItems.length) {
                // 初始化有物品的格子
                bagItemComp.init(bagItems[i]);
                bagItemNode.active = true;
            } else {
                // 保持空格子显示（但无物品）
                //bagItemComp.init(null); // 初始化为空状态
            }
        }
    }





    onButtonGetAllItems() {
        console.log("获取所有物品列表");
        const allItems = Core.Instance.bag.getItems();
        console.log("获取到的物品数量:", allItems.length);
        const contentNode = this.node.getChildByName("Bag").getChildByName("ScrollView").getChildByName("view").getChildByName("content");
        this.createBagItem();
        // 遍历所有物品
        for (let i = 0; i < allItems.length; i++) {
            const item = allItems[i];
            console.log("当前物品:", item);
            const bagItemNode = contentNode.children[i];
            //const bagItemNode = instantiate(ResourceManager.Instance.getRes<Node>(EPath.Prefab.BagItem));
            const bagItemComp = bagItemNode.getComponent(BagItem);
            bagItemComp.init(item);
            contentNode.addChild(bagItemNode);
        }
    }

    onButtonGetEquipmentItems() {
        console.log("获取装备物品列表");

        const equipmentItems = Core.Instance.bag.getEquipmentItems();
        console.log("获取到的装备物品数量:", equipmentItems.length);
        const contentNode = this.node.getChildByName("Bag").getChildByName("ScrollView").getChildByName("view").getChildByName("content");
        this.createBagItem(); // 重新创建所有背包格子
        // 遍历所有装备物品
        for (let i = 0; i < equipmentItems.length; i++) {
            const item = equipmentItems[i];
            console.log("当前装备物品:", item);
            const bagItemNode = contentNode.children[i];
            //const bagItemNode = instantiate(ResourceManager.Instance.getRes<Node>(EPath.Prefab.BagItem));
            const bagItemComp = bagItemNode.getComponent(BagItem);
            bagItemComp.init(item);
            contentNode.addChild(bagItemNode);
        }
    }

    onButtonGetOtherItems() {
        console.log("获取其他物品列表");

        const otherItems = Core.Instance.bag.getOtherItems();
        console.log("获取到的其他物品数量:", otherItems.length);
        const contentNode = this.node.getChildByName("Bag").getChildByName("ScrollView").getChildByName("view").getChildByName("content");
        this.createBagItem(); // 重新创建所有背包格子
        // 遍历所有装备物品
        for (let i = 0; i < otherItems.length; i++) {
            const item = otherItems[i];
            console.log("当前其他物品:", item);
            const bagItemNode = contentNode.children[i];
            //const bagItemNode = instantiate(ResourceManager.Instance.getRes<Node>(EPath.Prefab.BagItem));
            const bagItemComp = bagItemNode.getComponent(BagItem);
            bagItemComp.init(item);
            contentNode.addChild(bagItemNode);
        }
    }



// 打开筛选界面
    onButtonOpenShaixuan() {
        console.log("打开筛选界面");
        this.ndShaixuan.active = true;

        const ndBoard = this.ndShaixuan.getChildByName("Board");
        if (!ndBoard) return;

        // 节点名 -> 品质映射
        const qualityMap: { [key: string]: EItemQuality } = {
            "Common": EItemQuality.Common,
            "Uncommon": EItemQuality.Uncommon,
            "Rare": EItemQuality.Rare,
            "Epic": EItemQuality.Epic,
            "Legendary": EItemQuality.Legendary,
            "Artifact": EItemQuality.Artifact
        };

        for (const nodeName in qualityMap) {
            const quality = qualityMap[nodeName];
            const ndToggle = ndBoard.getChildByName(nodeName);
            
            if (ndToggle) {
                const toggleComp = ndToggle.getComponent(Toggle);
                if (toggleComp) {
                    // 1. 先临时移除事件监听，防止 setValue 触发回调导致逻辑死循环或重复计算
                    // 注意：这里假设你在编辑器里绑定的事件名叫 onButtonCheckEquipmentRarity
                    // 如果没法移除（编辑器绑定的很难移除），就使用上面的新版 onButtonCheckEquipmentRarity 逻辑
                    
                    // 使用新版逻辑：直接设置 isChecked
                    const shouldCheck = Core.Instance.checkEquipmentRarity.has(quality);
                    
                    // 只有当状态不一致时才赋值，减少不必要的事件触发
                    if (toggleComp.isChecked !== shouldCheck) {
                        toggleComp.isChecked = shouldCheck;
                    }
                }
            }
        }
    }



/**
     * 筛选Toggle回调
     * 注意：请确保编辑器里 Toggle 的 checkEvents 绑定的是这个函数
     * 第一个参数是 Toggle 组件本身
     * 第二个参数是 CustomEventData (需要在编辑器填入 '1', '2', '3' 等对应枚举值)
     */
    onButtonCheckEquipmentRarity(toggle: Toggle, customEventData: string) {
        // 将字符串转为数字
        const quality = parseInt(customEventData) as EItemQuality;
        
        if (isNaN(quality)) {
            console.error("筛选参数错误: customEventData 不是数字");
            return;
        }

        // === 核心修改 ===
        // 不再判断 Set 里有没有，而是判断 UI 现在的状态是什么
        if (toggle.isChecked) {
            // UI 是勾选状态 -> 数据层必须有这个值
            Core.Instance.checkEquipmentRarity.add(quality);
        } else {
            // UI 是未勾选状态 -> 数据层必须移除这个值
            Core.Instance.checkEquipmentRarity.delete(quality);
        }

        console.log(`筛选变更: ${quality}, 当前状态: ${toggle.isChecked}, 集合:`, Core.Instance.checkEquipmentRarity);
        Core.Instance.save();
        
        // 建议：点击后立即刷新背包显示
        this.refreshBag();
    }


onButtonSellBatch() {
        console.log("尝试批量出售");

        // 1. 获取当前勾选的筛选品质
        const qualities = Core.Instance.checkEquipmentRarity;

        // 校验：是否选择了品质
        if (!qualities || qualities.size === 0) {
            Core.Instance.showTips("请先在筛选栏勾选要出售的装备品质！");
            return;
        }

        // 2. 从背包管理器获取符合条件的装备
        const itemsToSell = Core.Instance.bag.getEquipmentsByQualities(qualities);

        // 3. 二次筛选：安全检查 (过滤掉已装备的)
        const validItems = itemsToSell.filter(item => {
            if (item.isEquipped) return false; 
            return true;
        });

        // 校验：是否有可卖物品
        if (validItems.length === 0) {
            Core.Instance.showTips("当前筛选条件下没有可出售的物品！");
            return;
        }

        // 4. 预计算总价 (先不删，只算钱)
        let totalGain = 0;
        validItems.forEach(item => {
            totalGain += (item.price || 0);
        });

        // 5. 弹出确认框
        Core.Instance.showConfirm(
            "批量出售", // 标题
            `确认出售 ${validItems.length} 件装备吗？\n预计获得 ${totalGain} 铜钱`, // 内容
            () => {
                // === 玩家点击【确定】后的逻辑 ===
                let soldCount = 0;
                
                // 执行删除
                for (const item of validItems) {
                    // 调用 BagManager 移除物品
                    const success = Core.Instance.bag.removeItem(item);
                    if (success) {
                        soldCount++;
                    }
                }

                // 结算处理
                if (soldCount > 0) {
                    // 增加铜钱
                    Core.Instance.gold += totalGain;
                    
                    // 提示玩家
                    Core.Instance.showTips(`成功出售 ${soldCount} 件装备，获得 ${totalGain} 铜钱！`);

                    // 数据保存
                    Core.Instance.save();
                    
                    // 发送资源变更事件（更新主界面铜钱UI）
                    Core.Instance.event.emit(EEvent.ResourceChanged);
                    
                    // 刷新背包格子显示
                    this.refreshBag();
                    
                    console.log(`批量出售完成。数量:${soldCount}, 总价:${totalGain}`);
                } else {
                    Core.Instance.showTips("出售过程异常，未删除任何物品");
                }
            },
            () => {
                // === 玩家点击【取消】后的逻辑 ===
                console.log("玩家取消了批量出售");
            }
        );
    }

   


}